diff -Naur 915resolution-0.5.3/915resolution.c 915resolution-0.5.3-patched20120521/915resolution.c
--- 915resolution-0.5.3/915resolution.c	2007-04-15 18:46:56.000000000 +0800
+++ 915resolution-0.5.3-patched20120521/915resolution.c	2014-11-27 15:36:39.000000000 +0800
@@ -14,6 +14,12 @@
  *
  * This source code is into the public domain.
  */
+/* This source has been patched by tempestuous in 2008, from 0.5.3.
+I BK added 500GMA and 945GME support (adapted from an arch patch), dec 2009.
+tempestuous adds device 2a408086 "GM45" Dec 12 2009.
+20120521: tempestuous: more patches, refer: 
+http://www.murga-linux.com/puppy/viewtopic.php?t=32462
+*/
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -55,13 +61,13 @@
 typedef unsigned int cardinal;
 
 typedef enum {
-    CT_UNKWN, CT_830, CT_845G, CT_855GM, CT_865G, CT_915G, CT_915GM, CT_945G, CT_945GM,
-    CT_946GZ, CT_G965, CT_Q965
+    CT_UNKWN, CT_500GMA, CT_830, CT_845G, CT_855GM, CT_865G, CT_915G, CT_915GM, CT_945G, CT_945GM,
+    CT_945GME, CT_946GZ, CT_G965, CT_Q965, CT_GM965, CT_G33, CT_GM45, CT_GMA3150, CT_HDGraphics
 } chipset_type;
 
 char * chipset_type_names[] = {
-    "UNKNOWN", "830",  "845G", "855GM", "865G", "915G", "915GM", "945G", "945GM",
-    "946GZ",   "G965", "Q965"
+    "UNKNOWN", "500GMA", "830",  "845G", "855GM", "865G", "915G", "915GM", "945G", "945GM",
+    "945GME", "946GZ",   "G965", "Q965", "GM965", "G33", "GM45", "GMA3150", "HDGraphics"
 };
 
 typedef enum {
@@ -181,6 +187,10 @@
     chipset_type type;
     
     switch (id) {
+    case 0x81008086:
+        type = CT_500GMA;
+        break;
+
     case 0x35758086:
         type = CT_830;
         break;
@@ -213,6 +223,10 @@
         type = CT_945GM;
         break;
 
+    case 0x27ac8086:
+        type = CT_945GME;
+        break;
+
     case 0x29708086:
         type = CT_946GZ;
         break;
@@ -225,6 +239,46 @@
         type = CT_Q965;
         break;
 
+    case 0x2a008086:
+        type = CT_GM965;
+        break;
+
+    case 0x2a018086:
+        type = CT_GM965;
+        break;
+
+    case 0x2a028086:
+        type = CT_GM965;
+        break;
+
+    case 0x29b08086:
+        type = CT_G33;
+        break;
+
+    case 0x29c08086:
+        type = CT_G33;
+        break;
+
+    case 0x2a408086:
+        type = CT_GM45;
+        break;
+
+    case 0xa0008086:
+        type = CT_GMA3150;
+        break;
+
+    case 0xa0108086:
+        type = CT_GMA3150;
+        break;
+
+    case 0x00408086:
+        type = CT_HDGraphics;
+        break;
+
+    case 0x00448086:
+        type = CT_HDGraphics;
+        break;
+
     default:
         type = CT_UNKWN;
         break;
@@ -502,15 +556,22 @@
         outl(0x8000005a, 0xcf8);
         outb(0x33, 0xcfe);
         break;
+    case CT_500GMA:
     case CT_845G:
     case CT_865G:
     case CT_915G:
     case CT_915GM:
     case CT_945G:
     case CT_945GM:
+    case CT_945GME:
     case CT_946GZ:
     case CT_G965:
     case CT_Q965:
+    case CT_GM965:
+    case CT_G33:
+    case CT_GM45:
+    case CT_GMA3150:
+    case CT_HDGraphics:
         outl(0x80000090, 0xcf8);
         map->b1 = inb(0xcfd);
         map->b2 = inb(0xcfe);
@@ -542,15 +603,22 @@
         outl(0x8000005a, 0xcf8);
         outb(map->b1, 0xcfe);
         break;
+    case CT_500GMA:
     case CT_845G:
     case CT_865G:
     case CT_915G:
     case CT_915GM:
     case CT_945G:
     case CT_945GM:
+    case CT_945GME:
     case CT_946GZ:
     case CT_G965:
     case CT_Q965:
+    case CT_GM965:
+    case CT_G33:
+    case CT_GM45:
+    case CT_GMA3150:
+    case CT_HDGraphics:
         outl(0x80000090, 0xcf8);
         outb(map->b1, 0xcfd);
         outb(map->b2, 0xcfe);
@@ -782,7 +850,10 @@
             return 0;
         }
         
-        if (!strcmp(argv[index], "845")) {
+        else if (!strcmp(argv[index], "500GMA")) {
+            *forced_chipset = CT_500GMA;
+        }
+        else if (!strcmp(argv[index], "845")) {
             *forced_chipset = CT_845G;
         }
         else if (!strcmp(argv[index], "855")) {
@@ -803,6 +874,9 @@
         else if (!strcmp(argv[index], "945GM")) {
             *forced_chipset = CT_945GM;
         }
+        else if (!strcmp(argv[index], "945GME")) {
+            *forced_chipset = CT_945GME;
+        }
         else if (!strcmp(argv[index], "946GZ")) {
             *forced_chipset = CT_946GZ;
         }
@@ -812,6 +886,21 @@
         else if (!strcmp(argv[index], "Q965")) {
             *forced_chipset = CT_Q965;
         }
+        else if (!strcmp(argv[index], "GM965")) {
+            *forced_chipset = CT_GM965;
+        }
+        else if (!strcmp(argv[index], "G33")) {
+            *forced_chipset = CT_G33;
+        }
+        else if (!strcmp(argv[index], "GM45")) {
+            *forced_chipset = CT_GM45;
+        }
+        else if (!strcmp(argv[index], "GMA3150")) {
+            *forced_chipset = CT_GMA3150;
+        }
+        else if (!strcmp(argv[index], "HDGraphics")) {
+            *forced_chipset = CT_HDGraphics;
+        }
         else {
             *forced_chipset = CT_UNKWN;
         }
